home *** CD-ROM | disk | FTP | other *** search
- // -*- C++ -*-
- /* $Id: globals.h,v 1.54 2003/02/21 03:47:41 slackorama Exp $
-
- * id3lib: a C++ library for creating and manipulating id3v1/v2 tags
- * Copyright 1999, 2000 Scott Thomas Haug
- * Copyright 2002 Thijmen Klok (thijmen@id3lib.org)
-
- * This library is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Library General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
- * License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
- * The id3lib authors encourage improvements and optimisations to be sent to
- * the id3lib coordinator. Please see the README file for details on where to
- * send such submissions. See the AUTHORS file for a list of people who have
- * contributed to id3lib. See the ChangeLog file for a list of changes to
- * id3lib. These files are distributed with id3lib at
- * http://download.sourceforge.net/id3lib/
- */
-
- /** This file defines common macros, types, constants, and enums used
- ** throughout id3lib.
- **/
-
- #ifndef _ID3LIB_GLOBALS_H_
- #define _ID3LIB_GLOBALS_H_
-
- #include <stdlib.h>
- #include "id3/sized_types.h"
-
- /* id3lib version.
- * we prefix variable declarations so they can
- * properly get exported in windows dlls.
- */
- #ifdef WIN32
- # define LINKOPTION_STATIC 1 //both for use and creation of static lib
- # define LINKOPTION_CREATE_DYNAMIC 2 //should only be used by prj/id3lib.dsp
- # define LINKOPTION_USE_DYNAMIC 3 //if your project links id3lib dynamic
- # ifndef ID3LIB_LINKOPTION
- # pragma message("*** NOTICE *** (not a real error)")
- # pragma message("* You should include a define in your project which reflect how you link the library")
- # pragma message("* If you use id3lib.lib or libprj/id3lib.dsp (you link static) you should add")
- # pragma message("* ID3LIB_LINKOPTION=1 to your preprocessor definitions of your project.")
- # pragma message("* If you use id3lib.dll (you link dynamic) you should add ID3LIB_LINKOPTION=3")
- # pragma message("* to your preprocessor definitions of your project.")
- # pragma message("***")
- # error read message above or win32.readme.first.txt
- # else
- # if (ID3LIB_LINKOPTION == LINKOPTION_CREATE_DYNAMIC)
- //used for creating a dynamic dll
- # define ID3_C_EXPORT extern _declspec(dllexport)
- # define ID3_CPP_EXPORT __declspec(dllexport)
- # define CCONV __stdcall // Added for VB & Delphi Compatibility - By FrogPrince Advised By Lothar
- # endif
- # if (ID3LIB_LINKOPTION == LINKOPTION_STATIC)
- //used for creating a static lib and using a static lib
- # define ID3_C_EXPORT
- # define ID3_CPP_EXPORT
- # define CCONV
- # endif
- # if (ID3LIB_LINKOPTION == LINKOPTION_USE_DYNAMIC)
- //used for those that do not link static and are using the dynamic dll by including a id3lib header
- # define ID3_C_EXPORT extern _declspec(dllimport)
- # define ID3_CPP_EXPORT __declspec(dllimport) //functions like these shouldn't be used by vb and delphi,
- # define CCONV __stdcall // Added for VB & Delphi Compatibility - By FrogPrince Advised By Lothar
- # endif
- # endif
- #else /* !WIN32 */
- # define ID3_C_EXPORT
- # define ID3_CPP_EXPORT
- # define CCONV
- #endif /* !WIN32 */
-
- #define ID3_C_VAR extern
-
- #ifndef __cplusplus
-
- typedef int bool;
- # define false (0)
- # define true (!false)
-
- #endif /* __cplusplus */
-
- ID3_C_VAR const char * const ID3LIB_NAME;
- ID3_C_VAR const char * const ID3LIB_RELEASE;
- ID3_C_VAR const char * const ID3LIB_FULL_NAME;
- ID3_C_VAR const int ID3LIB_MAJOR_VERSION;
- ID3_C_VAR const int ID3LIB_MINOR_VERSION;
- ID3_C_VAR const int ID3LIB_PATCH_VERSION;
- ID3_C_VAR const int ID3LIB_INTERFACE_AGE;
- ID3_C_VAR const int ID3LIB_BINARY_AGE;
-
- #define ID3_TAGID "ID3"
- #define ID3_TAGIDSIZE (3)
- #define ID3_TAGHEADERSIZE (10)
-
- /** String used for the description field of a comment tag converted from an
- ** id3v1 tag to an id3v2 tag
- **
- ** \sa #ID3V1_Tag
- **/
- #define STR_V1_COMMENT_DESC "ID3v1 Comment"
-
-
- typedef unsigned char uchar;
- typedef long unsigned int luint;
-
- typedef uint16 unicode_t;
- typedef uint16 flags_t;
-
- #define NULL_UNICODE ((unicode_t) '\0')
-
- /* These macros are used to make the C and C++ declarations for enums and
- * structs have the same syntax. Basically, it allows C users to refer to an
- * enum or a struct without prepending enum/struct.
- */
- #ifdef __cplusplus
- # define ID3_ENUM(E) enum E
- # define ID3_STRUCT(S) struct S
- #else
- # define ID3_ENUM(E) typedef enum _ ## E E; enum _ ## E
- # define ID3_STRUCT(S) typedef struct _ ## S S; struct _ ## S
- #endif
-
- /** \enum ID3_TextEnc
- ** Enumeration of the types of text encodings: ascii or unicode
- **/
- ID3_ENUM(ID3_TextEnc)
- {
- ID3TE_NONE = -1,
- ID3TE_ISO8859_1,
- ID3TE_UTF16,
- ID3TE_UTF16BE,
- ID3TE_UTF8,
- ID3TE_NUMENCODINGS,
- ID3TE_ASCII = ID3TE_ISO8859_1, // do not use this -> use ID3TE_IS_SINGLE_BYTE_ENC(enc) instead
- ID3TE_UNICODE = ID3TE_UTF16 // do not use this -> use ID3TE_IS_DOUBLE_BYTE_ENC(enc) instead
- };
-
- #define ID3TE_IS_SINGLE_BYTE_ENC(enc) ((enc) == ID3TE_ISO8859_1 || (enc) == ID3TE_UTF8)
- #define ID3TE_IS_DOUBLE_BYTE_ENC(enc) ((enc) == ID3TE_UTF16 || (enc) == ID3TE_UTF16BE)
-
- /** Enumeration of the various id3 specifications
- **/
- ID3_ENUM(ID3_V1Spec)
- {
- ID3V1_0 = 0,
- ID3V1_1,
- ID3V1_NUMSPECS
- };
-
- ID3_ENUM(ID3_V2Spec)
- {
- ID3V2_UNKNOWN = -1,
- ID3V2_2_0 = 0,
- ID3V2_2_1,
- ID3V2_3_0,
- ID3V2_4_0,
- ID3V2_EARLIEST = ID3V2_2_0,
- ID3V2_LATEST = ID3V2_3_0
- };
-
- /** The various types of tags that id3lib can handle
- **/
- ID3_ENUM(ID3_TagType)
- {
- ID3TT_NONE = 0, /**< Represents an empty or non-existant tag */
- ID3TT_ID3V1 = 1 << 0, /**< Represents an id3v1 or id3v1.1 tag */
- ID3TT_ID3V2 = 1 << 1, /**< Represents an id3v2 tag */
- ID3TT_LYRICS3 = 1 << 2, /**< Represents a Lyrics3 tag */
- ID3TT_LYRICS3V2 = 1 << 3, /**< Represents a Lyrics3 v2.00 tag */
- ID3TT_MUSICMATCH = 1 << 4, /**< Represents a MusicMatch tag */
- /**< Represents a Lyrics3 tag (for backwards compatibility) */
- ID3TT_LYRICS = ID3TT_LYRICS3,
- /** Represents both id3 tags: id3v1 and id3v2 */
- ID3TT_ID3 = ID3TT_ID3V1 | ID3TT_ID3V2,
- /** Represents all possible types of tags */
- ID3TT_ALL = ~ID3TT_NONE,
- /** Represents all tag types that can be prepended to a file */
- ID3TT_PREPENDED = ID3TT_ID3V2,
- /** Represents all tag types that can be appended to a file */
- ID3TT_APPENDED = ID3TT_ALL & ~ID3TT_ID3V2
- };
-
- /**
- ** Enumeration of the different types of fields in a frame.
- **/
- ID3_ENUM(ID3_FieldID)
- {
- ID3FN_NOFIELD = 0, /**< No field */
- ID3FN_TEXTENC, /**< Text encoding (unicode or ASCII) */
- ID3FN_TEXT, /**< Text field */
- ID3FN_URL, /**< A URL */
- ID3FN_DATA, /**< Data field */
- ID3FN_DESCRIPTION, /**< Description field */
- ID3FN_OWNER, /**< Owner field */
- ID3FN_EMAIL, /**< Email field */
- ID3FN_RATING, /**< Rating field */
- ID3FN_FILENAME, /**< Filename field */
- ID3FN_LANGUAGE, /**< Language field */
- ID3FN_PICTURETYPE, /**< Picture type field */
- ID3FN_IMAGEFORMAT, /**< Image format field */
- ID3FN_MIMETYPE, /**< Mimetype field */
- ID3FN_COUNTER, /**< Counter field */
- ID3FN_ID, /**< Identifier/Symbol field */
- ID3FN_VOLUMEADJ, /**< Volume adjustment field */
- ID3FN_NUMBITS, /**< Number of bits field */
- ID3FN_VOLCHGRIGHT, /**< Volume chage on the right channel */
- ID3FN_VOLCHGLEFT, /**< Volume chage on the left channel */
- ID3FN_PEAKVOLRIGHT, /**< Peak volume on the right channel */
- ID3FN_PEAKVOLLEFT, /**< Peak volume on the left channel */
- ID3FN_TIMESTAMPFORMAT,/**< SYLT Timestamp Format */
- ID3FN_CONTENTTYPE, /**< SYLT content type */
- ID3FN_LASTFIELDID /**< Last field placeholder */
- };
-
- /**
- ** Enumeration of the different types of frames recognized by id3lib
- **/
- ID3_ENUM(ID3_FrameID)
- {
- /* ???? */ ID3FID_NOFRAME = 0, /**< No known frame */
- /* AENC */ ID3FID_AUDIOCRYPTO, /**< Audio encryption */
- /* APIC */ ID3FID_PICTURE, /**< Attached picture */
- /* ASPI */ ID3FID_AUDIOSEEKPOINT, /**< Audio seek point index */
- /* COMM */ ID3FID_COMMENT, /**< Comments */
- /* COMR */ ID3FID_COMMERCIAL, /**< Commercial frame */
- /* ENCR */ ID3FID_CRYPTOREG, /**< Encryption method registration */
- /* EQU2 */ ID3FID_EQUALIZATION2, /**< Equalisation (2) */
- /* EQUA */ ID3FID_EQUALIZATION, /**< Equalization */
- /* ETCO */ ID3FID_EVENTTIMING, /**< Event timing codes */
- /* GEOB */ ID3FID_GENERALOBJECT, /**< General encapsulated object */
- /* GRID */ ID3FID_GROUPINGREG, /**< Group identification registration */
- /* IPLS */ ID3FID_INVOLVEDPEOPLE, /**< Involved people list */
- /* LINK */ ID3FID_LINKEDINFO, /**< Linked information */
- /* MCDI */ ID3FID_CDID, /**< Music CD identifier */
- /* MLLT */ ID3FID_MPEGLOOKUP, /**< MPEG location lookup table */
- /* OWNE */ ID3FID_OWNERSHIP, /**< Ownership frame */
- /* PRIV */ ID3FID_PRIVATE, /**< Private frame */
- /* PCNT */ ID3FID_PLAYCOUNTER, /**< Play counter */
- /* POPM */ ID3FID_POPULARIMETER, /**< Popularimeter */
- /* POSS */ ID3FID_POSITIONSYNC, /**< Position synchronisation frame */
- /* RBUF */ ID3FID_BUFFERSIZE, /**< Recommended buffer size */
- /* RVA2 */ ID3FID_VOLUMEADJ2, /**< Relative volume adjustment (2) */
- /* RVAD */ ID3FID_VOLUMEADJ, /**< Relative volume adjustment */
- /* RVRB */ ID3FID_REVERB, /**< Reverb */
- /* SEEK */ ID3FID_SEEKFRAME, /**< Seek frame */
- /* SIGN */ ID3FID_SIGNATURE, /**< Signature frame */
- /* SYLT */ ID3FID_SYNCEDLYRICS, /**< Synchronized lyric/text */
- /* SYTC */ ID3FID_SYNCEDTEMPO, /**< Synchronized tempo codes */
- /* TALB */ ID3FID_ALBUM, /**< Album/Movie/Show title */
- /* TBPM */ ID3FID_BPM, /**< BPM (beats per minute) */
- /* TCOM */ ID3FID_COMPOSER, /**< Composer */
- /* TCON */ ID3FID_CONTENTTYPE, /**< Content type */
- /* TCOP */ ID3FID_COPYRIGHT, /**< Copyright message */
- /* TDAT */ ID3FID_DATE, /**< Date */
- /* TDEN */ ID3FID_ENCODINGTIME, /**< Encoding time */
- /* TDLY */ ID3FID_PLAYLISTDELAY, /**< Playlist delay */
- /* TDOR */ ID3FID_ORIGRELEASETIME, /**< Original release time */
- /* TDRC */ ID3FID_RECORDINGTIME, /**< Recording time */
- /* TDRL */ ID3FID_RELEASETIME, /**< Release time */
- /* TDTG */ ID3FID_TAGGINGTIME, /**< Tagging time */
- /* TIPL */ ID3FID_INVOLVEDPEOPLE2, /**< Involved people list */
- /* TENC */ ID3FID_ENCODEDBY, /**< Encoded by */
- /* TEXT */ ID3FID_LYRICIST, /**< Lyricist/Text writer */
- /* TFLT */ ID3FID_FILETYPE, /**< File type */
- /* TIME */ ID3FID_TIME, /**< Time */
- /* TIT1 */ ID3FID_CONTENTGROUP, /**< Content group description */
- /* TIT2 */ ID3FID_TITLE, /**< Title/songname/content description */
- /* TIT3 */ ID3FID_SUBTITLE, /**< Subtitle/Description refinement */
- /* TKEY */ ID3FID_INITIALKEY, /**< Initial key */
- /* TLAN */ ID3FID_LANGUAGE, /**< Language(s) */
- /* TLEN */ ID3FID_SONGLEN, /**< Length */
- /* TMCL */ ID3FID_MUSICIANCREDITLIST,/**< Musician credits list */
- /* TMED */ ID3FID_MEDIATYPE, /**< Media type */
- /* TMOO */ ID3FID_MOOD, /**< Mood */
- /* TOAL */ ID3FID_ORIGALBUM, /**< Original album/movie/show title */
- /* TOFN */ ID3FID_ORIGFILENAME, /**< Original filename */
- /* TOLY */ ID3FID_ORIGLYRICIST, /**< Original lyricist(s)/text writer(s) */
- /* TOPE */ ID3FID_ORIGARTIST, /**< Original artist(s)/performer(s) */
- /* TORY */ ID3FID_ORIGYEAR, /**< Original release year */
- /* TOWN */ ID3FID_FILEOWNER, /**< File owner/licensee */
- /* TPE1 */ ID3FID_LEADARTIST, /**< Lead performer(s)/Soloist(s) */
- /* TPE2 */ ID3FID_BAND, /**< Band/orchestra/accompaniment */
- /* TPE3 */ ID3FID_CONDUCTOR, /**< Conductor/performer refinement */
- /* TPE4 */ ID3FID_MIXARTIST, /**< Interpreted, remixed, or otherwise modified by */
- /* TPOS */ ID3FID_PARTINSET, /**< Part of a set */
- /* TPRO */ ID3FID_PRODUCEDNOTICE, /**< Produced notice */
- /* TPUB */ ID3FID_PUBLISHER, /**< Publisher */
- /* TRCK */ ID3FID_TRACKNUM, /**< Track number/Position in set */
- /* TRDA */ ID3FID_RECORDINGDATES, /**< Recording dates */
- /* TRSN */ ID3FID_NETRADIOSTATION, /**< Internet radio station name */
- /* TRSO */ ID3FID_NETRADIOOWNER, /**< Internet radio station owner */
- /* TSIZ */ ID3FID_SIZE, /**< Size */
- /* TSOA */ ID3FID_ALBUMSORTORDER, /**< Album sort order */
- /* TSOP */ ID3FID_PERFORMERSORTORDER,/**< Performer sort order */
- /* TSOT */ ID3FID_TITLESORTORDER, /**< Title sort order */
- /* TSRC */ ID3FID_ISRC, /**< ISRC (international standard recording code) */
- /* TSSE */ ID3FID_ENCODERSETTINGS, /**< Software/Hardware and settings used for encoding */
- /* TSST */ ID3FID_SETSUBTITLE, /**< Set subtitle */
- /* TXXX */ ID3FID_USERTEXT, /**< User defined text information */
- /* TYER */ ID3FID_YEAR, /**< Year */
- /* UFID */ ID3FID_UNIQUEFILEID, /**< Unique file identifier */
- /* USER */ ID3FID_TERMSOFUSE, /**< Terms of use */
- /* USLT */ ID3FID_UNSYNCEDLYRICS, /**< Unsynchronized lyric/text transcription */
- /* WCOM */ ID3FID_WWWCOMMERCIALINFO, /**< Commercial information */
- /* WCOP */ ID3FID_WWWCOPYRIGHT, /**< Copyright/Legal infromation */
- /* WOAF */ ID3FID_WWWAUDIOFILE, /**< Official audio file webpage */
- /* WOAR */ ID3FID_WWWARTIST, /**< Official artist/performer webpage */
- /* WOAS */ ID3FID_WWWAUDIOSOURCE, /**< Official audio source webpage */
- /* WORS */ ID3FID_WWWRADIOPAGE, /**< Official internet radio station homepage */
- /* WPAY */ ID3FID_WWWPAYMENT, /**< Payment */
- /* WPUB */ ID3FID_WWWPUBLISHER, /**< Official publisher webpage */
- /* WXXX */ ID3FID_WWWUSER, /**< User defined URL link */
- /* */ ID3FID_METACRYPTO, /**< Encrypted meta frame (id3v2.2.x) */
- /* */ ID3FID_METACOMPRESSION, /**< Compressed meta frame (id3v2.2.1) */
- /* >>>> */ ID3FID_LASTFRAMEID /**< Last field placeholder */
- };
-
- ID3_ENUM(ID3_V1Lengths)
- {
- ID3_V1_LEN = 128,
- ID3_V1_LEN_ID = 3,
- ID3_V1_LEN_TITLE = 30,
- ID3_V1_LEN_ARTIST = 30,
- ID3_V1_LEN_ALBUM = 30,
- ID3_V1_LEN_YEAR = 4,
- ID3_V1_LEN_COMMENT = 30,
- ID3_V1_LEN_GENRE = 1
- };
-
- ID3_ENUM(ID3_FieldFlags)
- {
- ID3FF_NONE = 0,
- ID3FF_CSTR = 1 << 0,
- ID3FF_LIST = 1 << 1,
- ID3FF_ENCODABLE = 1 << 2,
- ID3FF_TEXTLIST = ID3FF_CSTR | ID3FF_LIST | ID3FF_ENCODABLE
- };
-
- /** Enumeration of the types of field types */
- ID3_ENUM(ID3_FieldType)
- {
- ID3FTY_NONE = -1,
- ID3FTY_INTEGER = 0,
- ID3FTY_BINARY,
- ID3FTY_TEXTSTRING,
- ID3FTY_NUMTYPES
- };
-
- /**
- ** Predefined id3lib error types.
- **/
- ID3_ENUM(ID3_Err)
- {
- ID3E_NoError = 0, /**< No error reported */
- ID3E_NoMemory, /**< No available memory */
- ID3E_NoData, /**< No data to parse */
- ID3E_BadData, /**< Improperly formatted data */
- ID3E_NoBuffer, /**< No buffer to write to */
- ID3E_SmallBuffer, /**< Buffer is too small */
- ID3E_InvalidFrameID, /**< Invalid frame id */
- ID3E_FieldNotFound, /**< Requested field not found */
- ID3E_UnknownFieldType, /**< Unknown field type */
- ID3E_TagAlreadyAttached, /**< Tag is already attached to a file */
- ID3E_InvalidTagVersion, /**< Invalid tag version */
- ID3E_NoFile, /**< No file to parse */
- ID3E_ReadOnly, /**< Attempting to write to a read-only file */
- ID3E_zlibError /**< Error in compression/uncompression */
- };
-
- ID3_ENUM(ID3_ContentType)
- {
- ID3CT_OTHER = 0,
- ID3CT_LYRICS,
- ID3CT_TEXTTRANSCRIPTION,
- ID3CT_MOVEMENT,
- ID3CT_EVENTS,
- ID3CT_CHORD,
- ID3CT_TRIVIA
- };
-
- ID3_ENUM(ID3_PictureType)
- {
- ID3PT_OTHER = 0,
- ID3PT_PNG32ICON = 1, // 32x32 pixels 'file icon' (PNG only)
- ID3PT_OTHERICON = 2, // Other file icon
- ID3PT_COVERFRONT = 3, // Cover (front)
- ID3PT_COVERBACK = 4, // Cover (back)
- ID3PT_LEAFLETPAGE = 5, // Leaflet page
- ID3PT_MEDIA = 6, // Media (e.g. lable side of CD)
- ID3PT_LEADARTIST = 7, // Lead artist/lead performer/soloist
- ID3PT_ARTIST = 8, // Artist/performer
- ID3PT_CONDUCTOR = 9, // Conductor
- ID3PT_BAND = 10, // Band/Orchestra
- ID3PT_COMPOSER = 11, // Composer
- ID3PT_LYRICIST = 12, // Lyricist/text writer
- ID3PT_REC_LOCATION = 13, // Recording Location
- ID3PT_RECORDING = 14, // During recording
- ID3PT_PERFORMANCE = 15, // During performance
- ID3PT_VIDEO = 16, // Movie/video screen capture
- ID3PT_FISH = 17, // A bright coloured fish
- ID3PT_ILLUSTRATION = 18, // Illustration
- ID3PT_ARTISTLOGO = 19, // Band/artist logotype
- ID3PT_PUBLISHERLOGO = 20 // Publisher/Studio logotype
- };
-
- ID3_ENUM(ID3_TimeStampFormat)
- {
- ID3TSF_FRAME = 1,
- ID3TSF_MS
- };
-
- ID3_ENUM(MP3_BitRates)
- {
- MP3BITRATE_FALSE = -1,
- MP3BITRATE_NONE = 0,
- MP3BITRATE_8K = 8000,
- MP3BITRATE_16K = 16000,
- MP3BITRATE_24K = 24000,
- MP3BITRATE_32K = 32000,
- MP3BITRATE_40K = 40000,
- MP3BITRATE_48K = 48000,
- MP3BITRATE_56K = 56000,
- MP3BITRATE_64K = 64000,
- MP3BITRATE_80K = 80000,
- MP3BITRATE_96K = 96000,
- MP3BITRATE_112K = 112000,
- MP3BITRATE_128K = 128000,
- MP3BITRATE_144K = 144000,
- MP3BITRATE_160K = 160000,
- MP3BITRATE_176K = 176000,
- MP3BITRATE_192K = 192000,
- MP3BITRATE_224K = 224000,
- MP3BITRATE_256K = 256000,
- MP3BITRATE_288K = 288000,
- MP3BITRATE_320K = 320000,
- MP3BITRATE_352K = 352000,
- MP3BITRATE_384K = 384000,
- MP3BITRATE_416K = 416000,
- MP3BITRATE_448K = 448000
- };
-
- ID3_ENUM(Mpeg_Layers)
- {
- MPEGLAYER_FALSE = -1,
- MPEGLAYER_UNDEFINED,
- MPEGLAYER_III,
- MPEGLAYER_II,
- MPEGLAYER_I
- };
-
- ID3_ENUM(Mpeg_Version)
- {
- MPEGVERSION_FALSE = -1,
- MPEGVERSION_2_5,
- MPEGVERSION_Reserved,
- MPEGVERSION_2,
- MPEGVERSION_1
- };
-
- ID3_ENUM(Mp3_Frequencies)
- {
- MP3FREQUENCIES_FALSE = -1,
- MP3FREQUENCIES_Reserved = 0,
- MP3FREQUENCIES_8000HZ = 8000,
- MP3FREQUENCIES_11025HZ = 11025,
- MP3FREQUENCIES_12000HZ = 12000,
- MP3FREQUENCIES_16000HZ = 16000,
- MP3FREQUENCIES_22050HZ = 22050,
- MP3FREQUENCIES_24000HZ = 24000,
- MP3FREQUENCIES_32000HZ = 32000,
- MP3FREQUENCIES_48000HZ = 48000,
- MP3FREQUENCIES_44100HZ = 44100,
- };
-
- ID3_ENUM(Mp3_ChannelMode)
- {
- MP3CHANNELMODE_FALSE = -1,
- MP3CHANNELMODE_STEREO,
- MP3CHANNELMODE_JOINT_STEREO,
- MP3CHANNELMODE_DUAL_CHANNEL,
- MP3CHANNELMODE_SINGLE_CHANNEL
- };
-
- ID3_ENUM(Mp3_ModeExt)
- {
- MP3MODEEXT_FALSE = -1,
- MP3MODEEXT_0,
- MP3MODEEXT_1,
- MP3MODEEXT_2,
- MP3MODEEXT_3
- };
-
- ID3_ENUM(Mp3_Emphasis)
- {
- MP3EMPHASIS_FALSE = -1,
- MP3EMPHASIS_NONE,
- MP3EMPHASIS_50_15MS,
- MP3EMPHASIS_Reserved,
- MP3EMPHASIS_CCIT_J17
- };
-
- ID3_ENUM(Mp3_Crc)
- {
- MP3CRC_ERROR_SIZE = -2,
- MP3CRC_MISMATCH = -1,
- MP3CRC_NONE = 0,
- MP3CRC_OK = 1
- };
-
- ID3_STRUCT(Mp3_Headerinfo)
- {
- Mpeg_Layers layer;
- Mpeg_Version version;
- MP3_BitRates bitrate;
- Mp3_ChannelMode channelmode;
- Mp3_ModeExt modeext;
- Mp3_Emphasis emphasis;
- Mp3_Crc crc;
- uint32 vbr_bitrate; // avg bitrate from xing header
- uint32 frequency; // samplerate
- uint32 framesize;
- uint32 frames; // nr of frames
- uint32 time; // nr of seconds in song
- bool privatebit;
- bool copyrighted;
- bool original;
- };
-
- #define ID3_NR_OF_V1_GENRES 148
-
- static const char *ID3_v1_genre_description[ID3_NR_OF_V1_GENRES] =
- {
- "Blues", //0
- "Classic Rock", //1
- "Country", //2
- "Dance", //3
- "Disco", //4
- "Funk", //5
- "Grunge", //6
- "Hip-Hop", //7
- "Jazz", //8
- "Metal", //9
- "New Age", //10
- "Oldies", //11
- "Other", //12
- "Pop", //13
- "R&B", //14
- "Rap", //15
- "Reggae", //16
- "Rock", //17
- "Techno", //18
- "Industrial", //19
- "Alternative", //20
- "Ska", //21
- "Death Metal", //22
- "Pranks", //23
- "Soundtrack", //24
- "Euro-Techno", //25
- "Ambient", //26
- "Trip-Hop", //27
- "Vocal", //28
- "Jazz+Funk", //29
- "Fusion", //30
- "Trance", //31
- "Classical", //32
- "Instrumental", //33
- "Acid", //34
- "House", //35
- "Game", //36
- "Sound Clip", //37
- "Gospel", //38
- "Noise", //39
- "AlternRock", //40
- "Bass", //41
- "Soul", //42
- "Punk", //43
- "Space", //44
- "Meditative", //45
- "Instrumental Pop", //46
- "Instrumental Rock", //47
- "Ethnic", //48
- "Gothic", //49
- "Darkwave", //50
- "Techno-Industrial", //51
- "Electronic", //52
- "Pop-Folk", //53
- "Eurodance", //54
- "Dream", //55
- "Southern Rock", //56
- "Comedy", //57
- "Cult", //58
- "Gangsta", //59
- "Top 40", //60
- "Christian Rap", //61
- "Pop/Funk", //62
- "Jungle", //63
- "Native American", //64
- "Cabaret", //65
- "New Wave", //66
- "Psychadelic", //67
- "Rave", //68
- "Showtunes", //69
- "Trailer", //70
- "Lo-Fi", //71
- "Tribal", //72
- "Acid Punk", //73
- "Acid Jazz", //74
- "Polka", //75
- "Retro", //76
- "Musical", //77
- "Rock & Roll", //78
- "Hard Rock", //79
- // following are winamp extentions
- "Folk", //80
- "Folk-Rock", //81
- "National Folk", //82
- "Swing", //83
- "Fast Fusion", //84
- "Bebob", //85
- "Latin", //86
- "Revival", //87
- "Celtic", //88
- "Bluegrass", //89
- "Avantgarde", //90
- "Gothic Rock", //91
- "Progressive Rock", //92
- "Psychedelic Rock", //93
- "Symphonic Rock", //94
- "Slow Rock", //95
- "Big Band", //96
- "Chorus", //97
- "Easy Listening", //98
- "Acoustic", //99
- "Humour", //100
- "Speech", //101
- "Chanson", //102
- "Opera", //103
- "Chamber Music", //104
- "Sonata", //105
- "Symphony", //106
- "Booty Bass", //107
- "Primus", //108
- "Porn Groove", //109
- "Satire", //110
- "Slow Jam", //111
- "Club", //112
- "Tango", //113
- "Samba", //114
- "Folklore", //115
- "Ballad", //116
- "Power Ballad", //117
- "Rhythmic Soul", //118
- "Freestyle", //119
- "Duet", //120
- "Punk Rock", //121
- "Drum Solo", //122
- "A capella", //123
- "Euro-House", //124
- "Dance Hall", //125
- "Goa", //126
- "Drum & Bass", //127
- "Club-House", //128
- "Hardcore", //129
- "Terror", //130
- "Indie", //131
- "Britpop", //132
- "Negerpunk", //133
- "Polsk Punk", //134
- "Beat", //135
- "Christian Gangsta Rap", //136
- "Heavy Metal", //137
- "Black Metal", //138
- "Crossover", //139
- "Contemporary Christian",//140
- "Christian Rock ", //141
- "Merengue", //142
- "Salsa", //143
- "Trash Metal", //144
- "Anime", //145
- "JPop", //146
- "Synthpop" //147
- };
-
- #define ID3_V1GENRE2DESCRIPTION(x) (x < ID3_NR_OF_V1_GENRES && x >= 0) ? ID3_v1_genre_description[x] : NULL
-
- #define MASK(bits) ((1 << (bits)) - 1)
- #define MASK1 MASK(1)
- #define MASK2 MASK(2)
- #define MASK3 MASK(3)
- #define MASK4 MASK(4)
- #define MASK5 MASK(5)
- #define MASK6 MASK(6)
- #define MASK7 MASK(7)
- #define MASK8 MASK(8)
-
- /*
- * The following is borrowed from glib.h (http://www.gtk.org)
- */
- #ifdef WIN32
-
- /* On native Win32, directory separator is the backslash, and search path
- * separator is the semicolon.
- */
- # define ID3_DIR_SEPARATOR '\\'
- # define ID3_DIR_SEPARATOR_S "\\"
- # define ID3_SEARCHPATH_SEPARATOR ';'
- # define ID3_SEARCHPATH_SEPARATOR_S ";"
-
- #else /* !WIN32 */
-
- # ifndef _EMX_
- /* Unix */
-
- # define ID3_DIR_SEPARATOR '/'
- # define ID3_DIR_SEPARATOR_S "/"
- # define ID3_SEARCHPATH_SEPARATOR ':'
- # define ID3_SEARCHPATH_SEPARATOR_S ":"
-
- # else
- /* EMX/OS2 */
-
- # define ID3_DIR_SEPARATOR '/'
- # define ID3_DIR_SEPARATOR_S "/"
- # define ID3_SEARCHPATH_SEPARATOR ';'
- # define ID3_SEARCHPATH_SEPARATOR_S ";"
-
- # endif
-
- #endif /* !WIN32 */
-
- #ifndef NULL
- # define NULL ((void*) 0)
- #endif
-
- #endif /* _ID3LIB_GLOBALS_H_ */
-
-